package com.nnnu.wsnackshop.service;

import com.nnnu.wsnackshop.pojo.dto.AddCategoryDTO;
import com.nnnu.wsnackshop.pojo.dto.CategoryPageDTO;
import com.nnnu.wsnackshop.pojo.dto.UpdateCategoryDTO;
import com.nnnu.wsnackshop.pojo.entity.Categories;
import com.baomidou.mybatisplus.extension.service.IService;
import com.nnnu.wsnackshop.pojo.vo.CategoryVO;
import com.nnnu.wsnackshop.result.PageResult;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;

/**
 * <p>
 * 商品分类 服务类
 * </p>
 *
 * @author zk
 * @since 2025-05-14
 */
public interface ICategoriesService extends IService<Categories> {

    PageResult<CategoryVO> pageCategories(CategoryPageDTO dto);

    List<CategoryVO> listTree();

    void addCategory(AddCategoryDTO dto);

    void updateCategory(UpdateCategoryDTO dto);

    void deleteCategory(Integer id);

    void exportCategories(HttpServletResponse response) throws IOException;

    void importCategories(MultipartFile file) throws IOException;

    void downloadTemplate(HttpServletResponse response);

    void updateSort(Integer id, Integer sort);

    void updateStatus(Integer id, Integer status);

    CategoryVO getCategoryDetail(Integer id);

    List<CategoryVO> listTopCategories();

    /**
     * 获取用户端顶级分类（只返回启用的）
     * 
     * @return 顶级分类列表
     */
    List<CategoryVO> getTopCategories();

    /**
     * 获取指定分类的子分类
     * 
     * @param parentId 父分类ID
     * @return 子分类列表
     */
    List<CategoryVO> listChildCategories(Integer parentId);

    /**
     * 获取分类树结构
     * 
     * @return 分类树
     */
    List<CategoryVO> getCategoryTree();

    /**
     * 获取所有分类的平铺列表
     * 
     * @return 所有分类列表
     */
    List<CategoryVO> listAllCategories();

}
